#ifndef __bavx_interface__
#define __bavx_interface__

#include "xvalue.h"
#include "stream.h"

namespace xm
{

	DEFINE_PROGID(XoTable);
	DEFINE_PROGID(Arguments);

	class IKXoTable : public IUnknown
	{
	public:
		STDMETHOD(PutXo)( LPCSTR aName, xv::AnyValue & v ) = 0;
		STDMETHOD(GetXo)( LPCSTR aName, xv::AnyValue & v ) = 0;
		STDMETHOD(DelXo)( LPCSTR aName ) = 0;
		STDMETHOD(Clear)() PURE;
		STDMETHOD(SetUnknown)( LPCSTR aName, IUnknown * po ) = 0;
		STDMETHOD(GetUnknown)( LPCSTR aName, REFIID riid, IUnknown ** pp ) = 0;
		//////////////////////////////////////////////////////////////////////////
		DECLARE_IID;
	};

	//DEFINE_IID(IXoTable,"{76E3E587-A79B-4819-93F4-085A1DF68A9F}"); 
	// {76E3E587-A79B-4819-93F4-085A1DF68A9F}
	DEFINE_IID(IKXoTable, "{76E3E587-A79B-4819-93F4-085A1DF68A9F}",
		0x76e3e587, 0xa79b, 0x4819, 0x93, 0xf4, 0x8, 0x5a, 0x1d, 0xf6, 0x8a, 0x9f);

	class IKArguments : public IUnknown
	{
	public:
		STDMETHOD(SetArgvByString)( LPCSTR aParamString ) PURE;
		STDMETHOD(GetArgv)( LPCSTR aParamPath, xv::AnyValue& v ) PURE;
		STDMETHOD(Clear)() PURE;
		STDMETHOD(SetArgv)( LPCSTR aParamPath, xv::AnyValue& v ) PURE;
		DECLARE_IID;
	};

	// {0E46230E-A2EC-4430-B2B2-98FCAEC3EB1D}
	DEFINE_IID( IKArguments, "{0E46230E-A2EC-4430-B2B2-98FCAEC3EB1D}",
		0xe46230e, 0xa2ec, 0x4430, 0xb2, 0xb2, 0x98, 0xfc, 0xae, 0xc3, 0xeb, 0x1d);


};

#endif